﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
    public class TipoPortariaRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(TipoPortaria tipoPortaria)
        {
            var strQuery = "";
            strQuery += " INSERT INTO TipoPortaria (descricao)";
            strQuery += string.Format(" values ('{0}')", tipoPortaria.Descricao);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(TipoPortaria tipoPortaria)
        {
            var strQuery = "";
            strQuery += "UPDATE TipoPortaria SET ";
            strQuery += string.Format(" Descricao='{0}' ", tipoPortaria.Descricao);
            strQuery += string.Format(" WHERE Id={0} ", tipoPortaria.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(TipoPortaria tipoPortaria)
        {
            if (tipoPortaria.Id > 0)
            {
                Alterar(tipoPortaria);
            }
            else
            {
                Inserir(tipoPortaria);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM TipoPortaria WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public TipoPortaria ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM TipoPortaria WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public IEnumerable<TipoPortaria> ListarTipoPortaria()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" Select * from TipoPortaria order by Descricao");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<TipoPortaria> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var tipoPortaria = new List<TipoPortaria>();
            while (reader.Read())
            {
                var TemObjeto = new TipoPortaria()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Descricao = reader["Descricao"].ToString()
                };
                tipoPortaria.Add(TemObjeto);
            }
            reader.Close();
            return tipoPortaria;
        }
    }
}
